﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace BDSim
{
    public class IonFitDLL
    {
        ///函数名称：CalIon_init
        ///函数功能：电离层计算初始化函数，根据所输入的UTC时间转化成年积日，判断需要读取的文件，并调用读文件函数读取文件
        ///输入：(1)Ion_Time，UTCTime形式，需要计算的UTC时间,年月日时分秒都需要赋值
        ///      (2)Iion,模型选择开关，0表示不计算电离层，1表示15阶球谐模型，2表示全球格网模型，3表示低阶球谐模型，4表示球冠谐模型，5表示三角级数模型，6表示二维多项式模型
        ///输出：无
        ///返回值：int型，-9999表示文件不存在，1表示读取文件成功,0表示选择的模型不存在
        //其他说明：所有模型都需要准备模型参数，参数文件夹应方法程序根目录下，模型与文件夹的对应关系为：1——15SPH；2——CODG；3——SH；4——SCHA；5——TSF；6--POLY；
        /////////   5和6的文件可从"ftp://ftp.unibe.ch/aiub/CODE/ "下载，文件需每天更新，请确保文件名格式及内容格式一致,推荐用模型1；
        [DllImport("IonFitDLL.dll", EntryPoint = "IonFit_Init", CallingConvention = CallingConvention.Cdecl)]    
        public static extern int IonFit_Init(UTCTime Ion_Time);


        /************************************************************************/
        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数功能：电离层参数拟合      
        //输入:
        //       (1)pIonoFit_Input，IonoFit_Input结构体，其中Select可取1-2的整数（1表示8参数Klobuchar模型，2是14参数Klobuchar模型），FitTime为拟合时间，年月日时分秒赋值
        //       (2)pIonoFit_Output， IonoFit_Output结构体
        //输出:pIonoFit_Output， IonoFit_Output结构体
        //返回值:int型，-9999表示文件不存在，0表示选择的模型不存在，1表示拟合完成
        //其他说明：此函数必须配置参数文件（".ION"文件），文件放在根目录下的"15SPH"文件夹下，可从"ftp://ftp.unibe.ch/aiub/CODE/ "下载，文件需每天更新
        /************************************************************************/
        [DllImport("IonFitDLL.dll", EntryPoint = "IonFit_Output", CallingConvention = CallingConvention.Cdecl)]  
        public static extern int IonFit_Output (IonoFit_Input pIonoFit_Input, out IonoFit_Output  pIonoFit_Output);
    }
}
